﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using Cesave.DistributedServices.Core.ErrorHandlers;
using Cesave.Domain.PermisosModule.Entities;

namespace Cesave.DistributedServices.PermisosModule
{
    /// <summary>
    /// Contrato del servicio distribuido del módulo PermisosModule.
    /// </summary>
    [ServiceContract(Name = "IPermisosModuleService",
        Namespace = "Cesave.DistributedServices.PermisosModule",
        SessionMode = SessionMode.NotAllowed)]
    public interface IPermisosModuleService
	{
		#region Estados

		/// <summary>
		/// 
		/// </summary>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindEstadosByStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Estado> FindEstadosByStatus(bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		[OperationContract(Name = "FindAllEstados")]
		[FaultContract(typeof(ServiceError))]
		List<Estado> FindAllEstados();

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estadoGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindEstadoByGuid")]
		[FaultContract(typeof(ServiceError))]
		Estado FindEstadoByGuid(Guid estadoGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estado"></param>
		[OperationContract(Name = "ChangeEstado")]
		[FaultContract(typeof(ServiceError))]
		void ChangeEstado(Estado estado);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estado"></param>
		[OperationContract(Name = "ActivateEstado")]
		[FaultContract(typeof(ServiceError))]
		void ActivateEstado(Estado estado);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estado"></param>
		[OperationContract(Name = "DeactivateEstado")]
		[FaultContract(typeof(ServiceError))]
		void DeactivateEstado(Estado estado);		

		#endregion

		#region Distritos

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estadoGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindDistritosByEstado")]
		[FaultContract(typeof(ServiceError))]
		List<Distrito> FindDistritosByEstado(Guid estadoGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estadoGuid"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindDistritosByEstadoAndStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Distrito> FindDistritosByEstadoAndStatus(Guid estadoGuid, bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distritoGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindDistritoByGuid")]
		[FaultContract(typeof(ServiceError))]
		Distrito FindDistritoByGuid(Guid distritoGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distrito"></param>
		[OperationContract(Name = "AddDistrito")]
		[FaultContract(typeof(ServiceError))]
		void AddDistrito(Distrito distrito);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distrito"></param>
		[OperationContract(Name = "ChangeDistrito")]
		[FaultContract(typeof(ServiceError))]
		void ChangeDistrito(Distrito distrito);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distrito"></param>
		[OperationContract(Name = "DeleteDistrito")]
		[FaultContract(typeof(ServiceError))]
		void DeleteDistrito(Distrito distrito);

		#endregion

		#region Personal de distrito

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distritoGuid"></param>
		/// <param name="cicloGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindDistritoPersonalByDistritoAndCiclo")]
		[FaultContract(typeof(ServiceError))]
		DistritoPersonal FindDistritoPersonalByDistritoAndCiclo(Guid distritoGuid, Guid cicloGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distritoPersonal"></param>
		[OperationContract(Name = "AddDistritoPersonal")]
		[FaultContract(typeof(ServiceError))]
		void AddDistritoPersonal(DistritoPersonal distritoPersonal);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distritoPersonal"></param>
		[OperationContract(Name = "ChangeDistritoPersonal")]
		[FaultContract(typeof(ServiceError))]
		void ChangeDistritoPersonal(DistritoPersonal distritoPersonal);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distritoPersonal"></param>
		[OperationContract(Name = "DeleteDistritoPersonal")]
		[FaultContract(typeof(ServiceError))]
		void DeleteDistritoPersonal(DistritoPersonal distritoPersonal);

		#endregion

		#region Ciclos

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		[OperationContract(Name = "FindAllCiclos")]
		[FaultContract(typeof(ServiceError))]
		List<Ciclo> FindAllCiclos();

		/// <summary>
		/// 
		/// </summary>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCiclosByStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Ciclo> FindCiclosByStatus(bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cicloId"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCicloByGuid")]
		[FaultContract(typeof(ServiceError))]
		Ciclo FindCicloByGuid(Guid cicloGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="ciclo"></param>
		[OperationContract(Name = "MakeCicloActual")]
		[FaultContract(typeof(ServiceError))]
		void MakeCicloActual(Ciclo ciclo);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="ciclo"></param>
		[OperationContract(Name = "AddCiclo")]
		[FaultContract(typeof(ServiceError))]
		void AddCiclo(Ciclo ciclo);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="ciclo"></param>
		[OperationContract(Name = "ChangeCiclo")]
		[FaultContract(typeof(ServiceError))]
		void ChangeCiclo(Ciclo ciclo);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="ciclo"></param>
		[OperationContract(Name = "DeleteCiclo")]
		[FaultContract(typeof(ServiceError))]
		void DeleteCiclo(Ciclo ciclo);

		#endregion

		#region Municipios

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estadoGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindMunicipiosByEstado")]
		[FaultContract(typeof(ServiceError))]
		List<Municipio> FindMunicipiosByEstado(Guid estadoGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estadoGuid"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindMunicipiosByEstadoAndStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Municipio> FindMunicipiosByEstadoAndStatus(Guid estadoGuid, bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distritoGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindMunicipiosByDistrito")]
		[FaultContract(typeof(ServiceError))]
		List<Municipio> FindMunicipiosByDistrito(Guid distritoGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distritoGuid"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindMunicipiosByDistritoAndStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Municipio> FindMunicipiosByDistritoAndStatus(Guid distritoGuid, bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="municipioGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindMunicipioByGuid")]
		[FaultContract(typeof(ServiceError))]
		Municipio FindMunicipioByGuid(Guid municipioGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="municipio"></param>
		[OperationContract(Name = "AddMunicipio")]
		[FaultContract(typeof(ServiceError))]
		void AddMunicipio(Municipio municipio);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="municipio"></param>
		[OperationContract(Name = "ChangeMunicipio")]
		[FaultContract(typeof(ServiceError))]
		void ChangeMunicipio(Municipio municipio);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="municipio"></param>
		[OperationContract(Name = "DeleteMunicipio")]
		[FaultContract(typeof(ServiceError))]
		void DeleteMunicipio(Municipio municipio);

		#endregion

		#region Juntas

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estadoGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindJuntasByEstado")]
		[FaultContract(typeof(ServiceError))]
		List<Junta> FindJuntasByEstado(Guid estadoGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estadoGuid"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindJuntasByEstadoAndStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Junta> FindJuntasByEstadoAndStatus(Guid estadoGuid, bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distritoGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindJuntasByDistrito")]
		[FaultContract(typeof(ServiceError))]
		List<Junta> FindJuntasByDistrito(Guid distritoGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="distritoGuid"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindJuntasByDistritoAndStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Junta> FindJuntasByDistritoAndStatus(Guid distritoGuid, bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindJuntaByGuid")]
		[FaultContract(typeof(ServiceError))]
		Junta FindJuntaByGuid(Guid juntaGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="municipioGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindJuntasByMunicipio")]
		[FaultContract(typeof(ServiceError))]
		List<Junta> FindJuntasByMunicipio(Guid municipioGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="municipioGuid"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindJuntasByMunicipioAndStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Junta> FindJuntasByMunicipioAndStatus(Guid municipioGuid, bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="junta"></param>
		[OperationContract(Name = "AddJunta")]
		[FaultContract(typeof(ServiceError))]
		void AddJunta(Junta junta);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="junta"></param>
		[OperationContract(Name = "ChangeJunta")]
		[FaultContract(typeof(ServiceError))]
		void ChangeJunta(Junta junta);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="junta"></param>
		[OperationContract(Name = "DeleteJunta")]
		[FaultContract(typeof(ServiceError))]
		void DeleteJunta(Junta junta);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="junta"></param>
		[OperationContract(Name = "ActivateJunta")]
		[FaultContract(typeof(ServiceError))]
		void ActivateJunta(Junta junta);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="junta"></param>
		[OperationContract(Name = "DeactivateJunta")]
		[FaultContract(typeof(ServiceError))]
		void DeactivateJunta(Junta junta);

		#endregion

		#region Acl

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		[OperationContract(Name = "FindAllAcl")]
		[FaultContract(typeof(ServiceError))]
		List<Acl> FindAllAcl();

		/// <summary>
		/// 
		/// </summary>
		/// <param name="aclGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindAclByGuid")]
		[FaultContract(typeof(ServiceError))]
		Acl FindAclByGuid(Guid aclGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="acl"></param>
		[OperationContract(Name = "AddAcl")]
		[FaultContract(typeof(ServiceError))]
		void AddAcl(Acl acl);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="acl"></param>
		[OperationContract(Name = "ChangeAcl")]
		[FaultContract(typeof(ServiceError))]
		void ChangeAcl(Acl acl);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="acl"></param>
		[OperationContract(Name = "DeleteAcl")]
		[FaultContract(typeof(ServiceError))]
		void DeleteAcl(Acl acl);

		#endregion

		#region Agentes

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindAgentesByJunta")]
		[FaultContract(typeof(ServiceError))]
		List<Agente> FindAgentesByJunta(Guid juntaGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindAgentesByJuntaAndStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Agente> FindAgentesByJuntaAndStatus(Guid juntaGuid, bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="aclGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindAgentesByAcl")]
		[FaultContract(typeof(ServiceError))]
		List<Agente> FindAgentesByAcl(Guid aclGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="agenteGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindAgenteByGuid")]
		[FaultContract(typeof(ServiceError))]
		Agente FindAgenteByGuid(Guid agenteGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="agente"></param>
		[OperationContract(Name = "AddAgente")]
		[FaultContract(typeof(ServiceError))]
		void AddAgente(Agente agente);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="agente"></param>
		[OperationContract(Name = "ChangeAgente")]
		[FaultContract(typeof(ServiceError))]
		void ChangeAgente(Agente agente);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="agente"></param>
		[OperationContract(Name = "DeleteAgente")]
		[FaultContract(typeof(ServiceError))]
		void DeleteAgente(Agente agente);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="agente"></param>
		/// <param name="oldPassword"></param>
		/// <param name="newPassword"></param>
		[OperationContract(Name = "ChangePassword")]
		[FaultContract(typeof(ServiceError))]
		void ChangePassword(Agente agente, string oldPassword, string newPassword);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="userName"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindAgenteByUsuario")]
		[FaultContract(typeof(ServiceError))]
		Agente FindAgenteByUsuario(string userName);

		#endregion

		#region Areas

		/// <summary>
		/// 
		/// </summary>
		/// <param name="area"></param>
		[OperationContract(Name = "AddArea")]
		[FaultContract(typeof(ServiceError))]
		void AddArea(Area area);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="area"></param>
		[OperationContract(Name = "ChangeArea")]
		[FaultContract(typeof(ServiceError))]
		void ChangeArea(Area area);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindAreasByJuntaArea")]
		[FaultContract(typeof(ServiceError))]
		List<Area> FindAreasByJunta(Guid juntaGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="area"></param>
		[OperationContract(Name = "DeleteArea")]
		[FaultContract(typeof(ServiceError))]
		void DeleteArea(Area area);

		#endregion

        #region Afianzadoras    
        
        [OperationContract(Name = "AddAfianzadora")]
        [FaultContract(typeof(ServiceError))]
        void AddAfianzadora(Afianzadora afianzadora);


        [OperationContract(Name = "ChangeAfianzadora")]
        [FaultContract(typeof(ServiceError))]
        void ChangeAfianzadora(Afianzadora afianzadora);


        [OperationContract(Name = "findAfianzadoraByJunta")]
        [FaultContract(typeof(ServiceError))]
        List<Afianzadora> findAfianzadorasByJunta(Guid juntaGuid);

        #endregion  

        #region Acreditaciones

        [OperationContract(Name = "AddAcreditacion")]
        [FaultContract(typeof(ServiceError))]
        void AddAcreditacion(Acreditacion acreditacion);

        [OperationContract(Name = "ChangeAcreditacion")]
        [FaultContract(typeof(ServiceError))]
        void ChangeAcreditacion(Acreditacion acreditacion);

        [OperationContract(Name = "FindAcreditacionByGuid")]
        [FaultContract(typeof(ServiceError))]
        Acreditacion FindAcreditacionByGuid(Guid acreditacionGuid);

        #endregion

        #region Concesiones

        [OperationContract(Name = "AddConcesion")]
        [FaultContract(typeof(ServiceError))]
        void AddConcesion(Concesion concesion);

        [OperationContract(Name = "ChangeConcesion")]
        [FaultContract(typeof(ServiceError))]
        void ChangeConcesion(Concesion concesion);

        [OperationContract(Name = "FindConcesionByGuidSpecification")]
        [FaultContract(typeof(ServiceError))]
        Concesion FindConcesionByGuidSpecification(Guid concesionGuid);

        #endregion

		#region Fechas de ciclo

		/// <summary>
		/// 
		/// </summary>
		/// <param name="ciclosFecha"></param>
		[OperationContract(Name = "AddCiclosFecha")]
		[FaultContract(typeof(ServiceError))]
		void AddCiclosFecha(CiclosFecha ciclosFecha);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="ciclosFecha"></param>
		[OperationContract(Name = "ChangeCiclosFechas")]
		[FaultContract(typeof(ServiceError))]
		void ChangeCiclosFecha(CiclosFecha ciclosFecha);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCiclosFechasByJunta")]
		[FaultContract(typeof(ServiceError))]
		List<CiclosFecha> FindCiclosFechasByJunta(Guid juntaGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <param name="cicloGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCiclosFechasByJuntaAndCiclo")]
		[FaultContract(typeof(ServiceError))]
		List<CiclosFecha> FindCiclosFechasByJuntaAndCiclo(Guid juntaGuid, Guid cicloGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <param name="fromDate"></param>
		/// <param name="toDate"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCiclosFechasByJuntaAndDateRange")]
		[FaultContract(typeof(ServiceError))]
		List<CiclosFecha> FindCiclosFechasByJuntaAndDateRange(Guid juntaGuid, DateTime fromDate, DateTime toDate);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cicloGuid"></param>
		/// <param name="fromDate"></param>
		/// <param name="toDate"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCiclosFechasByCicloAndDateRange")]
		[FaultContract(typeof(ServiceError))]
		List<CiclosFecha> FindCiclosFechasByCicloAndDateRange(Guid cicloGuid, DateTime fromDate, DateTime toDate);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <param name="cicloGuid"></param>
		/// <param name="fromDate"></param>
		/// <param name="toDate"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCiclosFechasByJuntaAndCicloAndDateRange")]
		[FaultContract(typeof(ServiceError))]
		List<CiclosFecha> FindCiclosFechasByJuntaAndCicloAndDateRange(Guid juntaGuid, Guid cicloGuid, DateTime fromDate, DateTime toDate);

		#endregion

		#region Folios de Permiso

		/// <summary>
		/// 
		/// </summary>
		/// <param name="folio"></param>
		[OperationContract(Name = "AddFoliosPermiso")]
		[FaultContract(typeof(ServiceError))]
		void AddFoliosPermiso(FoliosPermiso folio);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="folio"></param>
		[OperationContract(Name = "ChangeFoliosPermiso")]
		[FaultContract(typeof(ServiceError))]
		void ChangeFoliosPermiso(FoliosPermiso folio);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <param name="cicloGuid"></param>
		/// <param name="areaGuid"></param>
		[OperationContract(Name = "IncreaseFoliosPermiso")]
		[FaultContract(typeof(ServiceError))]
		int IncreaseFoliosPermiso(Guid juntaGuid, Guid cicloGuid, Guid areaGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <param name="cicloGuid"></param>
		/// <param name="areaGuid"></param>
		[OperationContract(Name = "FindFolioPermisoByJuntaAndCicloAndArea")]
		[FaultContract(typeof(ServiceError))]
		FoliosPermiso FindFolioPermisoByJuntaAndCicloAndArea(Guid juntaGuid, Guid cicloGuid, Guid areaGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <param name="cicloGuid"></param>
		[OperationContract(Name = "FindFoliosPermisoByJuntaAndCiclo")]
		[FaultContract(typeof(ServiceError))]
		List<FoliosPermiso> FindFoliosPermisoByJuntaAndCiclo(Guid juntaGuid, Guid cicloGuid);

		#endregion

		#region Números de cultivo

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivosNumero"></param>
		[OperationContract(Name = "AddCultivosNumero")]
		[FaultContract(typeof(ServiceError))]
		void AddCultivosNumero(CultivosNumero cultivosNumero);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivosNumero"></param>
		[OperationContract(Name = "ChangeCultivosNumero")]
		[FaultContract(typeof(ServiceError))]
		void ChangeCultivosNumero(CultivosNumero cultivosNumero);

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		[OperationContract(Name = "FindAllCultivosNumeros")]
		[FaultContract(typeof(ServiceError))]
		List<CultivosNumero> FindAllCultivosNumeros();

		/// <summary>
		/// 
		/// </summary>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCultivosNumerosByStatus")]
		[FaultContract(typeof(ServiceError))]
		List<CultivosNumero> FindCultivosNumerosByStatus(bool status = true);

		#endregion

		#region Estaciones de cultivo

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivosEstacion"></param>
		[OperationContract(Name = "AddCultivosEstacion")]
		[FaultContract(typeof(ServiceError))]
		void AddCultivosEstacion(CultivosEstacion cultivosEstacion);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivosEstacion"></param>
		[OperationContract(Name = "ChangeCultivosEstacion")]
		[FaultContract(typeof(ServiceError))]
		void ChangeCultivosEstacion(CultivosEstacion cultivosEstacion);

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		[OperationContract(Name = "FindAllCultivosEstaciones")]
		[FaultContract(typeof(ServiceError))]
		List<CultivosEstacion> FindAllCultivosEstaciones();

		/// <summary>
		/// 
		/// </summary>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCultivosEstacionesByStatus")]
		[FaultContract(typeof(ServiceError))]
		List<CultivosEstacion> FindCultivosEstacionesByStatus(bool status = true);

		#endregion

		#region Tenencias

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		[OperationContract(Name = "FindAllTenencias")]
		[FaultContract(typeof(ServiceError))]
		List<Tenencia> FindAllTenencias();

		/// <summary>
		/// 
		/// </summary>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindTenenciasByStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Tenencia> FindTenenciasByStatus(bool status = true);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="tenencia"></param>
		[OperationContract(Name = "AddTenencia")]
		[FaultContract(typeof(ServiceError))]
		void AddTenencia(Tenencia tenencia);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="tenencia"></param>
		[OperationContract(Name = "ChangeTenencia")]
		[FaultContract(typeof(ServiceError))]
		void ChangeTenencia(Tenencia tenencia);

		#endregion

		#region  Tipos de fuente de riego

		/// <summary>
		/// 
		/// </summary>
		/// <param name="riegoFuente"></param>
		[OperationContract(Name = "AddRiegoFuente")]
		[FaultContract(typeof(ServiceError))]
		void AddRiegoFuente(RiegoFuente riegoFuente);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="riegoFuente"></param>
		[OperationContract(Name = "ChangeRiegoFuente")]
		[FaultContract(typeof(ServiceError))]
		void ChangeRiegoFuente(RiegoFuente riegoFuente);

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		[OperationContract(Name = "FindAllRiegoFuentes")]
		[FaultContract(typeof(ServiceError))]
		List<RiegoFuente> FindAllRiegoFuentes();

		/// <summary>
		/// 
		/// </summary>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindRiegoFuentesByStatus")]
		[FaultContract(typeof(ServiceError))]
		List<RiegoFuente> FindRiegoFuentesByStatus(bool status = true);

		#endregion

		#region Módulos

		/// <summary>
		/// 
		/// </summary>
		/// <param name="modulo"></param>
		[OperationContract(Name = "AddModulo")]
		[FaultContract(typeof(ServiceError))]
		void AddModulo(Modulo modulo);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="modulo"></param>
		[OperationContract(Name = "ChangeModulo")]
		[FaultContract(typeof(ServiceError))]
		void ChangeModulo(Modulo modulo);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindModulosByJunta")]
		[FaultContract(typeof(ServiceError))]
		List<Modulo> FindModulosByJunta(Guid juntaGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindModulosByJuntaAndStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Modulo> FindModulosByJuntaAndStatus(Guid juntaGuid, bool status = true);

		#endregion

		#region Secciones

		/// <summary>
		/// 
		/// </summary>
		/// <param name="seccion"></param>
		[OperationContract(Name = "AddSeccion")]
		[FaultContract(typeof(ServiceError))]
		void AddSeccion(Seccion seccion);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="seccion"></param>
		[OperationContract(Name = "ChangeSeccion")]
		[FaultContract(typeof(ServiceError))]
		void ChangeSeccion(Seccion seccion);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="moduloGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindSeccionesByModulo")]
		[FaultContract(typeof(ServiceError))]
		List<Seccion> FindSeccionesByModulo(Guid moduloGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="moduloGuid"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindSeccionesByModuloAndStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Seccion> FindSeccionesByModuloAndStatus(Guid moduloGuid, bool status = true);

        /// <summary>
        /// Encuentra las secciones de acuerdo a la junta.
        /// </summary>
        /// <param name="juntaGuid">
        /// GUID de la junta.
        /// </param>
        /// <returns>
        /// Lista de secciones.
        /// </returns>
        [OperationContract(Name = "FindSeccionesByJunta")]
        [FaultContract(typeof(ServiceError))]
        List<Seccion> FindSeccionesByJunta(Guid juntaGuid);

        /// <summary>
        /// Encuentra la sección con el GUID indicado.
        /// </summary>
        /// <param name="seccionGuid">
        /// GUID de la sección
        /// </param>
        /// <returns></returns>
        [OperationContract(Name = "FindSeccionByGuid")]
        [FaultContract(typeof(ServiceError))]
        Seccion FindSeccionByGuid(Guid seccionGuid);

		#endregion

		#region Sistemas de riego

		/// <summary>
		/// 
		/// </summary>
		/// <param name="riegoSistema"></param>
		[OperationContract(Name = "AddRiegoSistema")]
		[FaultContract(typeof(ServiceError))]
		void AddRiegoSistema(RiegoSistema riegoSistema);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="riegoSistema"></param>
		[OperationContract(Name = "ChangeRiegoSistema")]
		[FaultContract(typeof(ServiceError))]
		void ChangeRiegoSistema(RiegoSistema riegoSistema);

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		[OperationContract(Name = "FindAllRiegoSistemas")]
		[FaultContract(typeof(ServiceError))]
		List<RiegoSistema> FindAllRiegoSistemas();

		/// <summary>
		/// 
		/// </summary>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindRiegoSistemasByStatus")]
		[FaultContract(typeof(ServiceError))]
		List<RiegoSistema> FindRiegoSistemasByStatus(bool status = true);

		#endregion

		#region Secciones de área

		/// <summary>
		/// 
		/// </summary>
		/// <param name="areaSeccion"></param>
		[OperationContract(Name = "AddAreaSeccion")]
		[FaultContract(typeof(ServiceError))]
		void AddAreaSeccion(AreaSeccion areaSeccion);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="areaSeccion"></param>
		[OperationContract(Name = "ChangeAreaSeccion")]
		[FaultContract(typeof(ServiceError))]
		void ChangeAreaSeccion(AreaSeccion areaSeccion);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="areaGuid"></param>
		/// <param name="juntaGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindAreaSeccionesByJuntaAndArea")]
		[FaultContract(typeof(ServiceError))]
		List<AreaSeccion> FindAreaSeccionesByJuntaAndArea(Guid juntaGuid, Guid areaGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <param name="areaGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindAreaSeccionesForExpedicion")]
		[FaultContract(typeof(ServiceError))]
		List<AreaSeccion> FindAreaSeccionesForExpedicion(Guid juntaGuid, Guid areaGuid);

		#endregion

		#region Ejidos

		/// <summary>
		/// 
		/// </summary>
		/// <param name="ejido"></param>
		[OperationContract(Name = "AddEjido")]
		[FaultContract(typeof(ServiceError))]
		void AddEjido(Ejido ejido);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="ejido"></param>
		[OperationContract(Name = "ChangeEjido")]
		[FaultContract(typeof(ServiceError))]
		void ChangeEjido(Ejido ejido);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="municipioGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindEjidosByMunicipio")]
		[FaultContract(typeof(ServiceError))]
		List<Ejido> FindEjidosByMunicipio(Guid municipioGuid);

		#endregion

		#region Usuarios

		/// <summary>
		/// 
		/// </summary>
		/// <param name="usuario"></param>
		[OperationContract(Name = "AddUsuario")]
		[FaultContract(typeof(ServiceError))]
		void AddUsuario(Usuario usuario);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="usuario"></param>
		[OperationContract(Name = "ChangeUsuario")]
		[FaultContract(typeof(ServiceError))]
		void ChangeUsuario(Usuario usuario);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindUsuariosByJunta")]
		[FaultContract(typeof(ServiceError))]
		List<Usuario> FindUsuariosByJunta(Guid juntaGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="estadoGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindUsuariosByEstado")]
		[FaultContract(typeof(ServiceError))]
		List<Usuario> FindUsuariosByEstado(Guid estadoGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="padron"></param>
		/// <param name="subPadron"></param>
		/// <param name="control"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindUsuarioByPadron")]
		[FaultContract(typeof(ServiceError))]
		Usuario FindUsuarioByPadron(string padron, string subPadron, string control);

		#endregion

		#region Clasificaciones de cultivo

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivoClasificacion"></param>
		[OperationContract(Name = "AddCultivoClasificacion")]
		[FaultContract(typeof(ServiceError))]
		void AddCultivoClasificacion(CultivoClasificacion cultivoClasificacion);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivoClasificacion"></param>
		[OperationContract(Name = "ChangeCultivoClasificacion")]
		[FaultContract(typeof(ServiceError))]
		void ChangeCultivoClasificacion(CultivoClasificacion cultivoClasificacion);

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		[OperationContract(Name = "FindAllCultivoClasificaciones")]
		[FaultContract(typeof(ServiceError))]
		List<CultivoClasificacion> FindAllCultivoClasificaciones();

		#endregion

		#region Cultivos

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivo"></param>
		[OperationContract(Name = "AddCultivo")]
		[FaultContract(typeof(ServiceError))]
		void AddCultivo(Cultivo cultivo);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivo"></param>
		[OperationContract(Name = "ChangeCultivo")]
		[FaultContract(typeof(ServiceError))]
		void ChangeCultivo(Cultivo cultivo);

		/// <summary>
		/// 
		/// </summary>
		/// <returns></returns>
		[OperationContract(Name = "FindallCultivos")]
		[FaultContract(typeof(ServiceError))]
		List<Cultivo> FindAllCultivos();

		/// <summary>
		/// 
		/// </summary>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCultivosByStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Cultivo> FindCultivosByStatus(bool status = true);

		/// <summary>
		/// Encuentra los cultivos que se pueden mostrar en la expedición
		/// de acuerdo con las especificaciones.
		/// </summary>
		/// <param name="cultivoGuid"></param>
		/// <param name="cicloGuid"></param>
		/// <param name="juntaGuid"></param>
		/// <param name="fromDate"></param>
		/// <param name="toDate"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCultivosForExpedicion")]
		[FaultContract(typeof(ServiceError))]
		List<Cultivo> FindCultivosForExpedicion(
			Guid cicloGuid,
			Guid juntaGuid,
			DateTime fromDate,
			DateTime toDate,
			bool status = true
		);

		#endregion

		#region Cantidades de agua de cultivo

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivosAgua"></param>
		[OperationContract(Name = "AddCultivosAgua")]
		[FaultContract(typeof(ServiceError))]
		void AddCultivosAgua(CultivosAgua cultivosAgua);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivosAgua"></param>
		[OperationContract(Name = "ChangeCultivosAgua")]
		[FaultContract(typeof(ServiceError))]
		void ChangeCultivosAgua(CultivosAgua cultivosAgua);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivoGuid"></param>
		/// <param name="cicloGuid"></param>
		/// <param name="juntaGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindCultivosAgua")]
		[FaultContract(typeof(ServiceError))]
		List<CultivosAgua> FindCultivosAgua(
			Guid cultivoGuid,
			Guid cicloGuid,
			Guid juntaGuid
		);

		#endregion

        #region Propiedades de cultivo

        /// <summary>
        /// Agrega las propiedades del cultivo
        /// </summary>
        /// <param name="propiedades">
        /// Propiedades del cultivo a agregar.
        /// </param>
        [OperationContract(Name = "AddCultivosPropiedad")]
        [FaultContract(typeof(ServiceError))]
        void AddCultivosPropiedad(CultivosPropiedad propiedades);

        /// <summary>
        /// Modifica las propiedades del cultivo.
        /// </summary>
        /// <param name="propiedades">
        /// Propiedades del cultivo a modificar.
        /// </param>
        [OperationContract(Name = "ChangeCultivosPropiedad")]
        [FaultContract(typeof(ServiceError))]
        void ChangeCultivosPropiedad(CultivosPropiedad propiedades);

        /// <summary>
        /// Encuentra las propiedades del cultivo de acuerdo a la junta y el ciclo indicados.
        /// </summary>
        /// <param name="cultivoGuid">
        /// GUID del cultivo.
        /// </param>
        /// <param name="cicloGuid">
        /// GUID del ciclo.
        /// </param>
        /// <param name="juntaGuid">
        /// GUID de la junta.
        /// </param>
        /// <returns></returns>
        [OperationContract(Name = "FindCultivosPropiedades")]
        [FaultContract(typeof(ServiceError))]
        CultivosPropiedad FindCultivosPropiedades(Guid cultivoGuid, Guid cicloGuid, Guid juntaGuid);

        #endregion

        #region Grupos de variedades

        /// <summary>
        /// Agrega un grupo de variedad del cultivo.
        /// </summary>
        /// <param name="grupo">
        /// Grupo de variedad a agregar.
        /// </param>
        [OperationContract(Name = "AddVariedadesGrupo")]
        [FaultContract(typeof(ServiceError))]
        void AddVariedadesGrupo(VariedadesGrupo grupo);

        /// <summary>
        /// Modifica un grupo de variedad del cultivo.
        /// </summary>
        /// <param name="grupo">
        /// Grupo de variedad a modificar.
        /// </param>
        [OperationContract(Name = "ChangeVariedadesGrupo")]
        [FaultContract(typeof(ServiceError))]
        void ChangeVariedadesGrupo(VariedadesGrupo grupo);

        /// <summary>
        /// Encuentra los grupos de variedades del cultivo.
        /// </summary>
        /// <param name="cultivoGuid">
        /// GUID del cultivo.
        /// </param>
        /// <returns>
        /// Lista de grupos de variedades.
        /// </returns>
        [OperationContract(Name = "FindVariedadesGruposByCultivo")]
        [FaultContract(typeof(ServiceError))]
        List<VariedadesGrupo> FindVariedadesGruposByCultivo(Guid cultivoGuid);

        #endregion

        #region Fechas de cultivo

        /// <summary>
        /// Agrega una fecha de cultivo.
        /// </summary>
        /// <param name="fecha"></param>
        [OperationContract(Name = "AddCultivosFecha")]
        [FaultContract(typeof(ServiceError))]
        void AddCultivosFecha(CultivosFecha fecha);

        /// <summary>
        /// Modifica una fecha de cultivo.
        /// </summary>
        /// <param name="fecha"></param>
        [OperationContract(Name = "ChangeCultivosFecha")]
        [FaultContract(typeof(ServiceError))]
        void ChangeCultivosFecha(CultivosFecha fecha);

        /// <summary>
        /// Encuentra las fechas de cultivo de acuerdo al
        /// cultivo, el ciclo y la junta.
        /// </summary>
        /// <param name="cultivoGuid"></param>
        /// <param name="cicloGuid"></param>
        /// <param name="juntaGuid"></param>
        /// <returns></returns>
        [OperationContract(Name = "FindCultivosFechasByCultivoAndCicloAndJunta")]
        [FaultContract(typeof(ServiceError))]
        List<CultivosFecha> FindCultivosFechasByCultivoAndCicloAndJunta(
            Guid cultivoGuid,
            Guid cicloGuid,
            Guid juntaGuid
        );

        /// <summary>
        /// Encuentra las fechas de cultivo para expedición
        /// </summary>
        /// <param name="cultivoGuid"></param>
        /// <param name="cicloGuid"></param>
        /// <param name="juntaGuid"></param>
        /// <param name="fromDate"></param>
        /// <param name="toDate"></param>
        /// <returns></returns>
        [OperationContract(Name = "FindCultivosFechasForExpedicion")]
        [FaultContract(typeof(ServiceError))]
        List<CultivosFecha> FindCultivosFechasForExpedicion(
            Guid cultivoGuid,
            Guid cicloGuid,
            Guid juntaGuid,
            DateTime fromDate,
            DateTime toDate
        );

        #endregion

		#region Variedades

		/// <summary>
		/// 
		/// </summary>
		/// <param name="variedad"></param>
		[OperationContract(Name = "AddVariedad")]
		[FaultContract(typeof(ServiceError))]
		void AddVariedad(Variedad variedad);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="variedad"></param>
		[OperationContract(Name = "ChangeVariedad")]
		[FaultContract(typeof(ServiceError))]
		void ChangeVariedad(Variedad variedad);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivoGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindVariedadesByCultivo")]
		[FaultContract(typeof(ServiceError))]
		List<Variedad> FindVariedadesByCultivo(Guid cultivoGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="cultivoGuid"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindVariedadesByCultivoAndStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Variedad> FindVariedadesByCultivoAndStatus(Guid cultivoGuid, bool status = true);

		#endregion

		#region Tipos de producción

		/// <summary>
		/// Agrega un nuevo tipo de producción.
		/// </summary>
		/// <param name="tipo"></param>
		[OperationContract(Name = "AddProduccionTipo")]
		[FaultContract(typeof(ServiceError))]
		void AddProduccionTipo(ProduccionTipo tipo);

		/// <summary>
		/// Modifica un tipo de producción.
		/// </summary>
		/// <param name="tipo"></param>
		[OperationContract(Name = "ChangeProduccionTipo")]
		[FaultContract(typeof(ServiceError))]
		void ChangeProduccionTipo(ProduccionTipo tipo);

		/// <summary>
		/// Obtiene todos los tipos de producción.
		/// </summary>
		/// <returns></returns>
		[OperationContract(Name = "FindAllProduccionTipos")]
		[FaultContract(typeof(ServiceError))]
		List<ProduccionTipo> FindAllProduccionTipos();

		/// <summary>
		/// Obtiene los tipos de producción de acuerdo al status.
		/// </summary>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindProduccionTiposByStatus")]
		[FaultContract(typeof(ServiceError))]
		List<ProduccionTipo> FindProduccionTiposByStatus(bool status = true);

		#endregion

		#region Fuentes de financiamiento

		/// <summary>
		/// 
		/// </summary>
		/// <param name="financiamiento"></param>
		[OperationContract(Name = "AddFinanciamiento")]
		[FaultContract(typeof(ServiceError))]
		void AddFinanciamiento(Financiamiento financiamiento);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="financiamiento"></param>
		[OperationContract(Name = "ChangeFinanciamiento")]
		[FaultContract(typeof(ServiceError))]
		void ChangeFinanciamiento(Financiamiento financiamiento);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindFinanciamientosByJunta")]
		[FaultContract(typeof(ServiceError))]
		List<Financiamiento> FindFinanciamientosByJunta(Guid juntaGuid);

		/// <summary>
		/// 
		/// </summary>
		/// <param name="juntaGuid"></param>
		/// <param name="status"></param>
		/// <returns></returns>
		[OperationContract(Name = "FindFinanciamientosByJuntaAndStatus")]
		[FaultContract(typeof(ServiceError))]
		List<Financiamiento> FindFinanciamientosByJuntaAndStatus(Guid juntaGuid, bool status = true);

		#endregion

	}
}
